import datetime

class TimeLimit:

    def __init__(self,start_time,end_time):
        self.start_time = start_time
        self.end_time = end_time


    """
        解释一下__call__
        1. 当类中实现了__call__方法，那么该类的对象就可以像函数一样调用
        2. 当类的对象调用的时候，会自动调用__call__方法
        使用场景类装饰器
        装饰器的本质就是一个闭包函数，只不过是闭包函数的一种特殊形式，闭包函数的特点是内部函数可以访问外部函数的变量
        闭包函数的特点是内部函数可以访问外部函数的变量，闭包函数的特点是内部函数可以访问外部函数的变量
    """
    def __call__(self,func):

        def wrapper(*args,**kwargs):
            now = datetime.datetime.now().time()
            if self.start_time < now < self.end_time:
                result = func(*args, **kwargs)
                return result
            else:
                print("当前时间不能执行")

        return wrapper


@TimeLimit(start_time=datetime.time(9,0), end_time=datetime.time(23,59))
def ceshi():
    print(f"只能在特定时间执行test")

ceshi()